I have very tedious task to optimize some ancient Fortran77 code. Honestly, I don't know fortran at all. I know how loops works and how to multiply matrices. I also know that this loop can be optimized to few 3-4 nested loops:
do i = 1, nocca
do j = 1, nocca
do k = 1, noccb
do l = 1, noccc
do m = 1, nva
do n =1, nvb
saps = oab(j, n+noccb)
sbap = oab(j, k)
sac = oac(i, l)
scr = oac(m + nocca, l)
im = i + nocca*(m-1)
kn = k + noccb*(n-1)
imkn = im + oava*(kn-1)
vrsab = ovovab(imkn)
demp3 = demp3 + 2.0d0*vrsab*(2.0d0*saps*sbap*sac*scr)
end do
end do
end do
end do
end do
end do
I was trying to calculate sapssac in the separate loop and similarly sacscr:
c Calculate saps * sbap
do j = 1, nocca
do k = 1, noccb
do n = 1, nvb
saps = oab(j, n + noccb)
sbap = oab(j, k)
saps_sbap(j, k) = saps_sbap(j, k) + saps*sbap
end do
end do
end do
c Calculate sac_scr
do i = 1, nocca
do l = 1, noccc
do m = 1, nva
sac = oac(i, l)
scr = oac(m + nocca, l)
sac_scr(i, l) = sac_scr(i, l) + sac*scr
end do
end do
end do
Finally I would like to write the last part to calculate demp3 but there are 5 indices not 4 as I expected. Maybe I'm doing this entirely wrong?
Any suggestions? hints?
Thanks in advance!